package utils;

import org.springframework.util.StringUtils;

public class DeptCodeGens {
 private static final int DEFAULT_CODE = 101;
 private static final int DEFAULT_DEPT_LENGTH = 3;

 /**
  *  根据父亲code,获取下级的下一个code
  *  参数：
  *      parentCode：父部门id
  *      localCode：当前父部门下最大子部门id
  *  逻辑：
  *      1.如果父部门id为空表示一级部门，只需要在最大的部门id加1即可
  *      2.如果保存的为下级部门
  *          2.1 当localCode为空，说明还没有子部门，此时编号为  101
  *          2.2 当localCode不为空，加1
  */
 public static synchronized String getSubCode(String parentCode,String localCode) {
  if(StringUtils.isEmpty(parentCode) || !StringUtils.isEmpty(localCode)) {
   return getNextCode(localCode);
  }else{
   return parentCode + getStrNum(DEFAULT_CODE);
  }
 }

 /**
  * 根据前一个code，获取同级下一个code
  */
 private static synchronized String getNextCode(String code) {
  if (code == null || code =="") {
   return getStrNum(DEFAULT_CODE);
  } else {
   String before = code.substring(0, code.length() - DEFAULT_DEPT_LENGTH);
   String after = code.substring(code.length() - DEFAULT_DEPT_LENGTH,code.length());
   Integer after_code_num = Integer.parseInt(after);
   return before + getStrNum(++after_code_num);
  }
 }

 /**
  * 将数字前面位数补零
  */
 private static String getStrNum(int num) {
  return String.format("%0" + DEFAULT_DEPT_LENGTH + "d", num);
 }

 /**
  * 计算下次保存的部门id
  *  100 市场部     (得到父部门id)
  *      100 101     北京事业部
  *      100 102     上海事业部(最大的子部门id)
  *
  *      ----------------------
  *      100 103     广州事业部
  *  101
  *      101 101
  *      101 102
  *  102
  *      102 101
  *      102 102
  *
  *
  */
 public static void main(String[] args) {
  String subCode = DeptCodeGens.getSubCode("101", null);//获取下次保存的部门id
  System.out.println(subCode);
 }
}